﻿using Microsoft.AspNetCore.Http;

namespace Sage.FreeSqlManager.Transaction
{
    /// <summary>
    /// 事务中间件 - 为每个请求设置服务提供者
    /// </summary>
    /// <remarks>
    /// 此中间件必须在认证中间件之后注册，以便可以访问用户上下文
    /// </remarks>
    /// <remarks>
    /// 初始化事务中间件
    /// </remarks>
    /// <param name="next">请求处理管道中的下一个委托</param>
    public class TransactionMiddleware(RequestDelegate next)
    {
        private readonly RequestDelegate _next = next;

        /// <summary>
        /// 处理HTTP请求
        /// </summary>
        /// <param name="context">HTTP上下文</param>
        /// <returns>表示异步操作的任务</returns>
        public async Task InvokeAsync(HttpContext context)
        {
            // 为当前请求设置服务提供者
            TransactionalAttribute.SetServiceProvider(context.RequestServices);

            // 继续处理请求
            await _next(context);
        }
    }
}
